use rust_test::common::*;

pub fn check_sized<T: Sized>(_: &T) {
    println!("This type is Sized");
}

pub fn check_sized2<T>(_: &T)
where
    T: Sized,
{
    println!("This type is Sized");
}

pub fn check_sized3<T: Sized>(val: &T) {
    println!("Size of value: {}", std::mem::size_of_val(val)); // 输出 4
}
pub fn tt() {
    let value: i32 = 42;
    check_sized(&value); // 编译通过，i32 是 Sized
    check_sized2(&value);
    check_sized3(&value);

    my_sep_sub();
    let slice: &[i32] = &[1, 2, 3, 5, 6, 8, 9, 9, 10];
    check_sized(&slice); // 编译错误，切片 &[i32] 不是 Sized
    check_sized2(&slice);
    check_sized3(&slice);

    my_sep_sub();
    let i_str = String::from("asdfbd");
    check_sized(&i_str); // 编译错误，切片 &[i32] 不是 Sized
    check_sized2(&i_str);
    check_sized3(&i_str);
}
